home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 21 / Cream of the Crop 21 (Terry Blount) (October 1996).iso / os2 / vsoup11.zip / mts.hh < prev    next >
Text File  |  1996-09-02  |  4KB  |  97 lines

  1. //  $Id: mts.hh 1.5 1996/09/02 13:24:07 hardy Exp $
  2. //
  3. //  This progam/module was written by Hardy Griech based on ideas and
  4. //  pieces of code from Chin Huang (cthuang@io.org).  Bug reports should
  5. //  be submitted to rgriech@ibm.net.
  6. //
  7. //  This file is part of soup++ for OS/2.  Soup++ including this file
  8. //  is freeware.  There is no warranty of any kind implied.  The terms
  9. //  of the GNU Gernal Public Licence are valid for this piece of software.
  10. //
  11. //  multithreading save library functions
  12. //
  13.  
  14.  
  15. #ifndef __MTS_HH__
  16. #define __MTS_HH__
  17.  
  18. #include <errno.h>
  19. #include <regexp.h>
  20. #include <stdio.h>
  21. #include <stdlib.h>
  22.  
  23. #if defined(OS2)  &&  defined(__MT__)
  24. ///#include <stddef.h>
  25. //
  26. //  dieses Verhalten basiert auf emx09a!
  27. //  (wenn errno == EINVAL, dann wurde _beginthread durch interrupt unterbrochen)
  28. //  BEGINTHREAD sollte eigentlich auch einen Fehlercode zurückliefern...
  29. //
  30. ////#define BEGINTHREAD(f,arg)  { while (_beginthread((f),NULL,327680,(arg)) == -1) { \
  31. ////                                 if (errno != EINVAL) \
  32. ////                     break; }}
  33. #define BEGINTHREAD(f,arg) _beginthread((f),NULL,100000,(arg))
  34. #else
  35. #define BEGINTHREAD(f,arg)  (f)(arg)
  36. #endif
  37.  
  38. #include "sema.hh"        // all semaphore classes included !
  39.  
  40.  
  41. FILE *fopenT( const char *name, const char *mode );
  42. int fcloseT( FILE *io );
  43. int fflushT( FILE *out );
  44. int fprintfT( FILE *out, const char *fmt, ... ) __attribute__ ((format (printf, 2, 3)));
  45. int printfT( const char *fmt, ... ) __attribute__ ((format (printf, 1, 2)));
  46. int sprintfT( char *dst, const char *fmt, ... ) __attribute__ ((format (printf, 2, 3)));
  47. int vfprintfT( FILE *out, const char *fmt, va_list arg_ptr );
  48. int vprintfT( const char *fmt, va_list arg_ptr );
  49. int vsprintfT( char *dst, const char *fmt, va_list arg_ptr );
  50. int sscanfT( const char *src, const char *fmt, ... ) __attribute__ ((format (scanf, 2, 3)));
  51. int fscanfT( FILE *in, const char *fmt, ... ) __attribute__ ((format (scanf, 2, 3)));
  52. int fgetcT( FILE *in );
  53. char *fgetsT( char *buf, int len, FILE *in );
  54. int fputcT( int c, FILE *out );
  55. int fputsT( const char *s, FILE *out );
  56. size_t freadT( void *buf, size_t size, size_t count, FILE *in );
  57. size_t fwriteT( const void *buf, size_t size, size_t count, FILE *out );
  58. int fseekT( FILE *io, long offset, int origin );
  59. long ftellT( FILE *io );
  60. int ftruncateT( FILE *io, long offset );
  61. FILE *popenT( const char *command, const char *mode );
  62. int pcloseT( FILE *io );
  63. int removeT( const char *fname );
  64.  
  65. regexp *regcompT( const char *exp );
  66. int regexecT( const regexp *cexp, const char *target );
  67.  
  68. const char *xstrdup( const char *src );
  69. void xstrdup( const char **dst, const char *src );
  70.  
  71.  
  72. //
  73. //  multithreading save counter
  74. //
  75. class TProtCounter {
  76. private:
  77.     TProtCounter( const TProtCounter &right );   // not allowed !
  78.     operator = ( const TProtCounter &right );    // not allowed !
  79. public:
  80.     TProtCounter( void ) { Cnt = 0; }
  81.     ~TProtCounter() {}
  82.     operator = ( const long &right ) { Cnt = right;  return *this; }
  83.  
  84.     TProtCounter & operator += (const long &offs) { sema.Request();  Cnt += offs;  sema.Release();  return *this;  }
  85.     TProtCounter & operator ++(void) { sema.Request();  ++Cnt;  sema.Release();  return *this; }
  86.     operator long() { long res;  sema.Request();  res = Cnt;  sema.Release();  return res; }
  87. private:
  88.     long Cnt;
  89.     TSemaphor sema;
  90. };
  91.  
  92.  
  93. extern TSemaphor sysSema;     // requested/released on library calls
  94.  
  95.  
  96. #endif   // __MTS_HH__
  97.